# from apscheduler.jobstores.memory import MemoryJobStore #内存做后端存储
# from apscheduler.jobstores.redis import RedisJobStore #redis做后端存储
from scheduler_package.bases.sql_job_store import (
    SQLAlchemyJobStore,
)  # mysql等做后端存储
from scheduler_project import settings
from scheduler_package.logger import scheduler_logger
from apscheduler.executors.pool import ThreadPoolExecutor

# mysql://root:ldc-root@127.0.0.1:3306/jobs?charset=utf8
MYSQL_CONFIG = settings.DATABASES.get("default")
MYSQL_USER = MYSQL_CONFIG.get("USER")
MYSQL_PASSWORD = MYSQL_CONFIG.get("PASSWORD")
MYSQL_HOST = MYSQL_CONFIG.get("HOST")
MYSQL_PORT = MYSQL_CONFIG.get("PORT")
MYSQL_NAME = MYSQL_CONFIG.get("NAME")
MYSQL_CHARSET = "utf8mb4"
URL = "mysql://{}:{}@{}:{}/{}?charset={}".format(
    MYSQL_USER, MYSQL_PASSWORD, MYSQL_HOST, MYSQL_PORT, MYSQL_NAME, MYSQL_CHARSET
)
# 时区
TIME_ZONE = "Asia/Shanghai"
# job的默认配置
JOB_DEFAULTS = {
    "coalesce": True,  # 系统挂掉，任务积攒多次为执行，True是合并成一次执行，False是执行所有的次数。 持久化存储才有效
    "max_instances": 3,  # 同一个任务同一时间最多只能有3个实例在运行。
}
# job的存储后端
JOB_STORE = {"default": SQLAlchemyJobStore(url=URL)}
# 执行器
JOB_EXECUTORS = {"default": ThreadPoolExecutor(max_workers=10)}

# 日志处理器
Scheduler_Logger = {"logger": scheduler_logger}
# 监听事件对应的情况
LISTENER = {
    1: "调度程序启动",
    2: "调度程序关闭",
    4: "调度程序中任务处理暂停",
    8: "调度程序中任务处理恢复",
    16: "将执行器添加到调度程序中",
    32: "执行器从调度程序中删除",
    64: "将任务存储添加到调度程序中",
    128: "任务存储从调度程序中删除",
    256: "所有任务从所有任务存储中删除或从一个特定的任务存储中删除	",
    512: "添加新的定时任务",
    1024: "从任务存储中删除了任务",
    2048: "从调度程序外部修改了任务",
    4096: "任务执行成功",
    8192: "任务在执行期间引发异常",
    16384: "错误了任务执行",
    32768: "任务已经提交到执行器中执行",
    65536: "任务因为达到最大并发执行时，触发的事件",
}

# 调度器初始化时，直接调用这个即可
CONFIG_DICT = {
    "imezone": TIME_ZONE,  # 时区
    "job_defaults": JOB_DEFAULTS,  # job的默认配置
    "jobstores": JOB_STORE,  # job的存储后端
    "gconfig": Scheduler_Logger,  # 日志记录相关的的配置
    "executors": JOB_EXECUTORS,  # 执行器
}

if __name__ == "__main__":
    import sys

    print(sys.path)
